QR decomposition using Givens rotations
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=dp), | intent(in), | DIMENSION(:, :) | :: | A | ||
real(kind=dp), | intent(out), | DIMENSION(SIZE(A, 1) ,SIZE(A, 2)) | :: | Q | ||
real(kind=dp), | intent(out), | DIMENSION(SIZE(A, 1) ,SIZE(A, 2)) | :: | R |
SUBROUTINE QR_Givens_decomposition(A, Q, R) REAL(dp), DIMENSION(:, :), INTENT(IN) :: A REAL(dp), DIMENSION(SIZE(A, 1) ,SIZE(A, 2)), INTENT(OUT) :: Q, R REAL(dp), DIMENSION(SIZE(A, 1) ,SIZE(A, 2)) :: G INTEGER :: N, i, j N= SIZE(A, 1) R = A Q = Identity_n(N) DO j = 1, N-1 DO i = j+1, N G = rotation_matrix(R, [i, j]) R = MATMUL(G, R) Q = MATMUL(Q, TRANSPOSE(G)) END DO END DO END SUBROUTINE QR_Givens_decomposition